package com.yonghui.summer.ioc.context;

import android.app.Activity;
import android.content.Context;

/**
 * 上下文
 */
public interface BootContext {

    /**
     * 根据名称获得Bean
     *
     * @param rId 名称
     * @return bean
     */
    <T> T getBean(Integer rId, Class<T> tClass);

    /**
     * 根据名称获得Bean
     *
     * @param name Bean 名称
     * @return bean
     */
    Object getBean(String name);

    /**
     * 根据类型获得Bean
     *
     * @param name Bean 名称
     * @param <T>  类型
     * @return bean
     */
    <T> T getBean(Class<T> name);

    /**
     * 根据类型获得Bean
     *
     * @param name   Bean 名称
     * @param tClass 类型
     * @param <T>    类型
     * @return bean
     */
    <T> T getBean(String name, Class<T> tClass);

    /**
     * 注册bean
     *
     * @param bean bean内容
     * @return
     */
    void registerBean(Object bean);

    /**
     * 根据名称注册Bean
     *
     * @param name 名称
     * @param bean bean内容
     */
    void registerBean(String name, Object bean);

    /**
     * 根据名称注册Bean
     *
     * @param name 名称
     * @param bean bean内容
     */
    void registerBean(String name, Class bean);


    /**
     * 注册bean
     *
     * @param clazz 类
     * @return
     */
    void registerBean(Class clazz);

    /**
     * 根据名称获得Bean
     *
     * @param rId 名称
     * @return bean
     */
    void registerBean(Integer rId, Class tClass);

    /**
     * 获取安卓上下文
     *
     * @return context
     */
    Context getContext();

    void scan(Context context, String[] packages);

    void handleAutowired(Class clazz, Object object);

    void handleAutowired(Activity activity);
}
